MVVM (Model-View-ViewModel) প্যাটার্নে Command Binding এবং Event Handling দুটি গুরুত্বপূর্ণ পদ্ধতি। এগুলি UI ইন্টারঅ্যাকশন এবং বিজনেস লজিকের মধ্যে যোগাযোগ প্রতিষ্ঠা করে, কিন্তু View এবং ViewModel এর মধ্যে সরাসরি ইন্টারঅ্যাকশন এড়ানোর জন্য আলাদা পদ্ধতি ব্যবহার করা হয়।
Command Binding হল একটি প্রক্রিয়া যার মাধ্যমে ViewModel এর Command অবজেক্টের সাথে UI উপাদানগুলির (যেমন বাটন, লিঙ্ক ইত্যাদি) ইন্টারঅ্যাকশন বাঁধা হয়। এতে ViewModel থেকে View-এ ইউজারের কমান্ডের অ্যাকশনটি পাঠানো হয়। এটি View এবং ViewModel এর মধ্যে পরিষ্কার বিভাজন বজায় রাখে এবং UI ইভেন্টগুলোকে ViewModel-এ কমান্ডে রূপান্তরিত করে।
Execute()
মেথড থাকে যা UI অ্যাকশন সম্পন্ন করার জন্য ViewModel এর সাথে সংযুক্ত থাকে।ধরা যাক, একটি LoginCommand তৈরি করা হয়েছে যা LoginViewModel থেকে View-এ বাটন ক্লিকের মাধ্যমে কমান্ড প্রেরণ করবে।
public class LoginCommand : ICommand
{
private readonly LoginViewModel _viewModel;
public LoginCommand(LoginViewModel viewModel)
{
_viewModel = viewModel;
}
public bool CanExecute(object parameter)
{
return !string.IsNullOrEmpty(_viewModel.Username) && !string.IsNullOrEmpty(_viewModel.Password);
}
public void Execute(object parameter)
{
_viewModel.Login();
}
public event EventHandler CanExecuteChanged;
}
এখানে, LoginCommand ক্লাসের Execute()
মেথড LoginViewModel এর Login()
মেথডকে কল করছে। CanExecute() মেথডটি চেক করে যে ফর্মে প্রয়োজনীয় ডেটা পূর্ণ হয়েছে কিনা।
এখন, XAML (UI) এ এই কমান্ডটি বাটনের সাথে বাইন্ড করা হবে:
<Button Content="Login" Command="{Binding LoginCommand}" />
এখানে, বাটনে ক্লিক করার সময় LoginCommand এক্সিকিউট হবে, যা ViewModel এর লগইন লজিক চালাবে।
Event Handling হল একটি প্রক্রিয়া যেখানে View থেকে ViewModel বা অন্য কোন অংশে ইভেন্ট ট্রিগার করার মাধ্যমে কার্যক্রম সম্পন্ন হয়। Event গুলি সাধারণত View-এ ইউজার অ্যাকশন (যেমন বাটন ক্লিক, মাউস হভার ইত্যাদি) ঘটানোর পর সিস্টেমে একটি প্রতিক্রিয়া সৃষ্টি করে।
এটি MVVM প্যাটার্নের বাইরে View এবং ViewModel এর মধ্যে যোগাযোগের আরেকটি মাধ্যম হতে পারে, যদিও এটি Command Binding এর তুলনায় সাধারণত কম ব্যবহৃত হয় MVVM এ।
ধরা যাক, একটি Button
ক্লিক করার জন্য ইভেন্ট হ্যান্ডলিং ব্যবহৃত হচ্ছে:
private void OnButtonClick(object sender, RoutedEventArgs e)
{
_viewModel.Login();
}
এখানে, OnButtonClick
মেথডটি View থেকে ViewModel-এ লগইন ফাংশন কল করছে। এটি ViewModel এর একটি মেথড বা কার্যক্রমকে ট্রিগার করছে।
এটি ViewModel এর ডেটা বা কার্যকলাপের পরিবর্তে শুধুমাত্র UI-তে একটি কার্যকলাপ ঘটাতে ব্যবহৃত হতে পারে।
বৈশিষ্ট্য | Command Binding | Event Handling |
---|---|---|
সংযোগ | UI উপাদান এবং ViewModel এর মধ্যে একযোগী যোগাযোগ | View এবং ViewModel এর মধ্যে সরাসরি যোগাযোগ |
Testing | সহজ টেস্টিং, কারণ কমান্ড মেথডকে আলাদা টেস্ট করা যায় | ইভেন্ট হ্যান্ডলার টেস্ট করা তুলনামূলকভাবে কঠিন |
Separation of Concerns | View এবং ViewModel এর মধ্যে পরিষ্কার বিভাজন | View এবং ViewModel এর মধ্যে সম্পর্ক দৃঢ় হতে পারে |
Use Case | UI অ্যাকশনের মাধ্যমে লজিক সম্পাদন করা (e.g. button click) | UI ইভেন্টগুলির সাথে সরাসরি হ্যান্ডলার যুক্ত করা (e.g. button click event) |
Command Binding এবং Event Handling দুটি গুরুত্বপূর্ণ পদ্ধতি MVVM প্যাটার্নে, তবে Command Binding ব্যবহার করা সাধারণত বেশি পছন্দনীয়। এটি UI এবং ViewModel এর মধ্যে পরিষ্কার যোগাযোগ এবং কোডের পুনঃব্যবহারযোগ্যতা নিশ্চিত করে, যখন Event Handling সরাসরি ViewModel এবং View এর মধ্যে যোগাযোগ স্থাপন করতে পারে, যা কখনও কখনও MVVM এর উদ্দেশ্যের সাথে সঙ্গতিপূর্ণ না হতে পারে।
Command Binding MVVM (Model-View-ViewModel) প্যাটার্নের একটি গুরুত্বপূর্ণ বৈশিষ্ট্য, যা ইউজারের ইন্টারঅ্যাকশন (যেমন বাটনে ক্লিক) এবং ViewModel এর কার্যকরী কোড (অথবা কমান্ড) এর মধ্যে একটি পরিষ্কার, পুনঃব্যবহারযোগ্য এবং স্কেলেবল সম্পর্ক তৈরি করে। এটি View এবং ViewModel এর মধ্যে কিপর্যন্ত সরাসরি ইন্টারঅ্যাকশন থেকে বিরত থাকে, এবং অ্যাপ্লিকেশনের লজিক ও UI কে আলাদা রাখে।
এখানে Command Binding কী এবং কীভাবে এটি কাজ করে, তা বিস্তারিতভাবে ব্যাখ্যা করা হয়েছে।
Command Binding হল একটি প্রক্রিয়া, যার মাধ্যমে UI উপাদান (যেমন বাটন, চেকবক্স ইত্যাদি) কোনো Command (যা মূলত ViewModel এ সংজ্ঞায়িত একটি ক্লাস) এর সাথে বাইন্ড হয়। এই কমান্ডটি একটি নির্দিষ্ট অ্যাকশন বা লজিক পরিচালনা করে যখন ইউজার UI উপাদানে ইন্টারঅ্যাক্ট করে (যেমন, বাটনে ক্লিক করা)।
Command একটি ICommand ইন্টারফেসের মাধ্যমে বাস্তবায়িত হয়, যা দুটি প্রধান মেথড ধারণ করে:
ICommand ইন্টারফেস: প্রথমে ICommand ইন্টারফেসটি বাস্তবায়িত করতে হবে, যাতে কমান্ডটি কার্যকরী হতে পারে। এটি দুটি প্রধান মেথড এবং একটি ইভেন্ট ধারণ করে:
public interface ICommand
{
void Execute(object parameter);
bool CanExecute(object parameter);
event EventHandler CanExecuteChanged;
}
Concrete Command ক্লাস তৈরি: এর পরে, ICommand ইন্টারফেস বাস্তবায়িত করা একটি কনক্রিট কমান্ড ক্লাস তৈরি করতে হবে, যেখানে Execute()
এবং CanExecute()
মেথডের লজিক থাকবে।
উদাহরণ:
public class SubmitCommand : ICommand
{
private readonly ViewModel _viewModel;
public SubmitCommand(ViewModel viewModel)
{
_viewModel = viewModel;
}
public event EventHandler CanExecuteChanged;
public void Execute(object parameter)
{
// Submit action, e.g., save data
_viewModel.SubmitData();
}
public bool CanExecute(object parameter)
{
// Check if command can execute, e.g., if input is valid
return _viewModel.CanSubmit();
}
public void RaiseCanExecuteChanged()
{
CanExecuteChanged?.Invoke(this, EventArgs.Empty);
}
}
এখানে SubmitCommand
কমান্ডটি ViewModel এর SubmitData
মেথডটিকে কল করছে এবং CanExecute মেথডটি যাচাই করছে যে, ViewModel-এ কোনো শর্ত পূর্ণ হলে কি এই কমান্ডটি কার্যকরী হবে।
Command Property in ViewModel: ViewModel এ কমান্ডটি একটি প্রপার্টি হিসেবে যুক্ত করতে হবে, যা View এ বাইন্ড হবে। উদাহরণস্বরূপ:
public class ViewModel
{
public ICommand SubmitCommand { get; private set; }
public ViewModel()
{
SubmitCommand = new SubmitCommand(this);
}
public void SubmitData()
{
// Data submission logic
}
public bool CanSubmit()
{
// Check if all required fields are filled
return !string.IsNullOrEmpty(UserName);
}
}
এখানে SubmitCommand
একটি ICommand টাইপের প্রপার্টি যা SubmitCommand
ক্লাসের একটি ইনস্ট্যান্স ধারণ করছে।
View (XAML) Binding: View এ, XAML ফাইলের মাধ্যমে কমান্ডটি UI উপাদান (যেমন বাটন) এর সাথে বাইন্ড করা হয়। XAML তে Command
প্রপার্টি ব্যবহার করে এটি বাইন্ড করা হয়:
<Button Content="Submit"
Command="{Binding SubmitCommand}" />
এখানে, Button এর Command
প্রপার্টি ViewModel এর SubmitCommand
এর সাথে বাইন্ড হচ্ছে। যখন ইউজার বাটনে ক্লিক করবে, তখন SubmitCommand এর Execute()
মেথড চালু হবে।
CanExecute()
মেথডের মাধ্যমে নির্ধারণ করা যেতে পারে যে কমান্ডটি কখন কার্যকর হবে, যা ইউজারের ইনপুট অনুযায়ী শর্তবদ্ধ হতে পারে।ধরা যাক, একটি Login বাটনের জন্য কমান্ড তৈরি করতে:
ViewModel-এ LoginCommand
তৈরি করুন:
public class LoginViewModel
{
public ICommand LoginCommand { get; private set; }
public LoginViewModel()
{
LoginCommand = new RelayCommand(ExecuteLogin, CanExecuteLogin);
}
public void ExecuteLogin()
{
// Perform login logic
Console.WriteLine("Login successful");
}
public bool CanExecuteLogin()
{
// Check if username and password are valid
return !string.IsNullOrEmpty(UserName) && !string.IsNullOrEmpty(Password);
}
}
RelayCommand ক্লাস (যা ICommand
ইন্টারফেস বাস্তবায়িত করে) তৈরি করুন:
public class RelayCommand : ICommand
{
private readonly Action _execute;
private readonly Func<bool> _canExecute;
public RelayCommand(Action execute, Func<bool> canExecute)
{
_execute = execute;
_canExecute = canExecute;
}
public event EventHandler CanExecuteChanged;
public bool CanExecute(object parameter) => _canExecute();
public void Execute(object parameter) => _execute();
}
XAML এ কমান্ড বাইন্ডিং করুন:
<Button Content="Login"
Command="{Binding LoginCommand}" />
এই উদাহরণে, LoginCommand ইউজারের ইনপুট (ইউজারনেম এবং পাসওয়ার্ড) চেক করে এবং LoginCommand এর CanExecuteLogin()
মেথড দ্বারা যাচাই করে যে, বাটন ক্লিকের মাধ্যমে কমান্ডটি কার্যকরী হবে কিনা।
Command Binding MVVM প্যাটার্নে View এবং ViewModel এর মধ্যে একধরনের যোগাযোগ স্থাপন করে যা অ্যাপ্লিকেশনের লজিক ও UI এর মধ্যে পরিষ্কার সেপারেশন নিশ্চিত করে। এটি কোডের পুনঃব্যবহারযোগ্যতা, টেস্টেবিলিটি, এবং ডিকাপ্লিংয়ে সাহায্য করে।
MVVM প্যাটার্নে Button Command এবং RelayCommand দুটি গুরুত্বপূর্ণ কনসেপ্ট। এগুলি ViewModel-এ বিজনেস লজিক বা অ্যাকশন সংজ্ঞায়িত করার জন্য ব্যবহৃত হয়, যাতে View-এ UI ইন্টারঅ্যাকশনের মাধ্যমে কার্যক্রম শুরু করা যায়। এই প্যাটার্নটি View এবং ViewModel এর মধ্যে পরিষ্কার বিভাজন বজায় রাখে এবং কোডের পুনঃব্যবহারযোগ্যতা বাড়ায়।
Button Command হল একটি কৌশল যার মাধ্যমে একটি বাটনের ক্লিক ইভেন্ট পরিচালনা করা হয়, যা মূলত ViewModel-এ থাকা কোনো কমান্ডের সাথে বাইন্ড করা হয়। এই পদ্ধতিতে View থেকে ViewModel-এ কাজের নির্দেশ পাঠানো হয়, এবং এতে ViewModel কোডের মাধ্যমে কার্যক্রম সম্পাদিত হয়।
ধরা যাক, আমরা একটি LoginCommand তৈরি করতে যাচ্ছি যা Login বাটন ক্লিক করলে ViewModel-এ থাকা একটি মেথড কল করবে।
public class LoginViewModel
{
private ICommand _loginCommand;
// ICommand প্রপার্টি
public ICommand LoginCommand
{
get
{
if (_loginCommand == null)
{
_loginCommand = new RelayCommand(Login, CanLogin);
}
return _loginCommand;
}
}
// Login অ্যাকশন
private void Login(object parameter)
{
// এখানে Login লজিক থাকবে
Console.WriteLine("User logged in successfully.");
}
// Login কি সম্ভব তা চেক করা
private bool CanLogin(object parameter)
{
// যদি ইউজারনেম এবং পাসওয়ার্ড ভ্যালিড হয়, তবেই লগইন সম্ভব
return !string.IsNullOrEmpty(Username) && !string.IsNullOrEmpty(Password);
}
// User credentials
public string Username { get; set; }
public string Password { get; set; }
}
এখানে, RelayCommand ক্লাসের মাধ্যমে LoginCommand কমান্ড তৈরি করা হয়েছে। এই কমান্ডের দুটি অংশ রয়েছে:
Login
: যেখানে লগইন লজিক থাকে।CanLogin
: যা চেক করে লগইন করা যাবে কিনা (যেমন, ইউজারনেম এবং পাসওয়ার্ড ফিল্ডের অবস্থা)।এখন XAML এ এই কমান্ডটি বাইন্ড করা হবে:
<Button Content="Login" Command="{Binding LoginCommand}" />
এখানে, Button এর Command
প্রপার্টি LoginCommand-এর সাথে বাইন্ড করা হয়েছে, যাতে বাটন ক্লিক করলে LoginCommand এর Execute
মেথড চালু হয়।
RelayCommand হল একটি কাস্টম কমান্ড ক্লাস যা সাধারণত MVVM প্যাটার্নে ব্যবহৃত হয়। এটি ICommand ইন্টারফেসের একটি সাধারণ বাস্তবায়ন (implementation), যা ViewModel থেকে UI ইন্টারঅ্যাকশনের সাথে যুক্ত কাজগুলো (যেমন বাটন ক্লিক) পরিচালনা করতে সাহায্য করে।
RelayCommand সাধারণত দুইটি প্যারামিটার নেয়:
public class RelayCommand : ICommand
{
private readonly Action<object> _execute;
private readonly Predicate<object> _canExecute;
public RelayCommand(Action<object> execute, Predicate<object> canExecute = null)
{
_execute = execute ?? throw new ArgumentNullException(nameof(execute));
_canExecute = canExecute;
}
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
public bool CanExecute(object parameter)
{
return _canExecute == null || _canExecute(parameter);
}
public void Execute(object parameter)
{
_execute(parameter);
}
}
এখানে:
_execute
: এটি Action যা কমান্ডটি কার্যকর করার জন্য ব্যবহার হয় (যেমন, লগইন প্রক্রিয়া)।_canExecute
: এটি Predicate যা চেক করে যে, কমান্ডটি কার্যকর হওয়া উচিত কি না (যেমন, ইনপুট ফিল্ডের মান ভ্যালিড কিনা)।Button Command এবং RelayCommand MVVM প্যাটার্নে UI ইন্টারঅ্যাকশনের সাথে বিজনেস লজিকের সংযোগকে সহজ করে তোলে এবং কোডের পুনঃব্যবহারযোগ্যতা, টেস্টেবিলিটি এবং মেইনটেনেবল কোড নিশ্চিত করতে সাহায্য করে। RelayCommand ক্লাসের মাধ্যমে ICommand ইন্টারফেসের কার্যকরী বাস্তবায়ন করা হয়, যা ViewModel এবং View এর মধ্যে যোগাযোগ সহজ করে দেয়।
MVVM প্যাটার্নে Event Handling এবং Event-to-Command Mapping গুরুত্বপূর্ণ ভূমিকা পালন করে। Event Handling ব্যবহারকারীর ইনপুট বা অ্যাপ্লিকেশনের স্টেট পরিবর্তনের প্রতি প্রতিক্রিয়া প্রদান করে, যেখানে Event-to-Command Mapping ব্যবহারকারী ইন্টারঅ্যাকশনের ফলে ViewModel এ একটি নির্দিষ্ট কমান্ড রান করতে সাহায্য করে। এটি View এবং ViewModel এর মধ্যে একটি পরিষ্কার, ডিকোপলড (decoupled) যোগাযোগ স্থাপন করে।
এখানে Event Handling এবং Event-to-Command Mapping এর ভূমিকা এবং ব্যবহারের কৌশল সম্পর্কে আলোচনা করা হয়েছে।
Event Handling হল এমন একটি প্রক্রিয়া, যেখানে ব্যবহারকারী বা অ্যাপ্লিকেশনের অন্যান্য অংশ থেকে আসা ইভেন্টগুলো (যেমন বাটনে ক্লিক, টেক্সটবক্সে টাইপ করা, স্ক্রোল করা ইত্যাদি) ViewModel-এ প্রেরিত হয়। MVVM প্যাটার্নে Event Handling মূলত View-এ ঘটে, এবং ইভেন্টের প্রতিক্রিয়া ViewModel এর মাধ্যমে পরিচালিত হয়।
ধরা যাক, একটি বাটনে ক্লিক করার পরে একটি কমান্ড রান করাতে চাই:
public class MyViewModel : INotifyPropertyChanged
{
public ICommand ButtonClickCommand { get; set; }
public MyViewModel()
{
ButtonClickCommand = new RelayCommand(OnButtonClick);
}
private void OnButtonClick()
{
// কোড যা বাটন ক্লিক হলে চালাতে হবে
Console.WriteLine("Button clicked!");
}
}
এখন, View (XAML) এ বাটন ক্লিকের ইভেন্টকে কমান্ডের সাথে বাইন্ড করা হয়:
<Button Content="Click Me" Command="{Binding ButtonClickCommand}" />
Event-to-Command Mapping MVVM প্যাটার্নে একটি গুরুত্বপূর্ণ কৌশল, যার মাধ্যমে UI ইভেন্টগুলিকে ViewModel এর কমান্ডের সাথে ম্যাপ করা হয়। এটি View এবং ViewModel এর মধ্যে ক্লিন কমিউনিকেশন নিশ্চিত করে, যাতে View সরাসরি ViewModel এর লজিকের সাথে যোগাযোগ না করে।
Event-to-Command Mapping সাধারণত ICommand ইন্টারফেস এবং কমান্ড প্যাটার্নের মাধ্যমে পরিচালিত হয়। UI-তে Event (যেমন বাটনে ক্লিক) হলে কমান্ডটি ViewModel-এ চলে যায় এবং সেখানে কমান্ডের Execute মেথডটি চালানো হয়।
public class MainViewModel
{
public ICommand ClickCommand { get; set; }
public MainViewModel()
{
ClickCommand = new RelayCommand(OnClick);
}
private void OnClick()
{
// এই মেথডে বিজনেস লজিক থাকবে
MessageBox.Show("Button clicked in ViewModel!");
}
}
<Button Content="Click Me" Command="{Binding ClickCommand}" />
এখানে Button এর ক্লিক ইভেন্টটি ClickCommand এর মাধ্যমে ViewModel-এ ম্যাপ করা হয়েছে।
এছাড়া, কিছু ক্ষেত্রে Event-to-Command Mapping এর সাথে Command Parameters ব্যবহার করা যেতে পারে, যেখানে ইভেন্টের সাথে কিছু অতিরিক্ত তথ্য (যেমন বাটনের ভ্যালু বা ইনপুট ডেটা) Command-এ পাস করা হয়।
<Button Content="Click Me" Command="{Binding ClickCommand}" CommandParameter="Some Data" />
এখানে, CommandParameter হিসেবে "Some Data"
পাস করা হয়েছে যা ViewModel এ কমান্ডে ব্যবহৃত হতে পারে।
public class MainViewModel
{
public ICommand ClickCommand { get; set; }
public MainViewModel()
{
ClickCommand = new RelayCommand<string>(OnClick);
}
private void OnClick(string parameter)
{
// Parameter এর ব্যবহার
MessageBox.Show("Button clicked with parameter: " + parameter);
}
}
এভাবে, Event-to-Command Mapping এবং Command Parameters ব্যবহারের মাধ্যমে, UI ইভেন্টের সাথে আরো বেশি কাস্টমাইজড ডেটা বা কার্যক্রম পরিচালনা করা সম্ভব হয়।
এখন, আপনি যদি Event Handling এবং Event-to-Command Mapping সঠিকভাবে ব্যবহার করতে পারেন, তবে আপনার অ্যাপ্লিকেশনটি হবে আরো শক্তিশালী, টেস্টযোগ্য এবং রক্ষণাবেক্ষণযোগ্য।
MVVM প্যাটার্নে Command একটি গুরুত্বপূর্ণ উপাদান, যা View থেকে ViewModel-এ ইউজারের অ্যাকশন (যেমন বাটন ক্লিক) প্রেরণ করে। ICommand ইন্টারফেস Command প্যাটার্নের একটি মূল অংশ, যা ViewModel-এ কমান্ডের জন্য একটি স্ট্যান্ডার্ড ইন্টারফেস প্রদান করে।
ICommand ইন্টারফেসের মাধ্যমে, আপনি কমান্ডের কাজ, কার্যকারিতা এবং শর্তাবলী নির্ধারণ করতে পারেন। এখানে ICommand ইন্টারফেস এবং Custom Command তৈরি করার বিস্তারিত প্রক্রিয়া দেয়া হল।
ICommand ইন্টারফেস একটি স্ট্যান্ডার্ড ইন্টারফেস যা কমান্ডের কার্যকারিতা পরিচালনা করতে ব্যবহৃত হয়। এটি সাধারণত দুইটি মেথড এবং একটি প্রপার্টি ধারণ করে:
true
অথবা false
)।public interface ICommand
{
void Execute(object parameter);
bool CanExecute(object parameter);
event EventHandler CanExecuteChanged;
}
Custom Command তৈরি করার জন্য আপনাকে ICommand ইন্টারফেস বাস্তবায়ন (implement) করতে হবে এবং এতে থাকা মেথডগুলির কার্যকারিতা প্রদান করতে হবে। সাধারণত, এটি একটি ক্লাস হিসেবে তৈরি করা হয় যা একটি নির্দিষ্ট কাজ (যেমন বাটনে ক্লিক) সম্পাদন করে।
ধরা যাক, আমাদের একটি SubmitCommand
তৈরি করতে হবে, যা একটি বাটনে ক্লিক করলে একটি নির্দিষ্ট কাজ করবে (যেমন ফর্ম সাবমিট করা)।
using System;
using System.Windows.Input;
public class SubmitCommand : ICommand
{
private readonly Action _execute;
private readonly Func<bool> _canExecute;
// কনস্ট্রাক্টর যা Execute এবং CanExecute এর জন্য ফাংশন নেবে
public SubmitCommand(Action execute, Func<bool> canExecute = null)
{
_execute = execute ?? throw new ArgumentNullException(nameof(execute));
_canExecute = canExecute;
}
// Execute মেথড যা কমান্ডটি কার্যকর করবে
public void Execute(object parameter)
{
_execute.Invoke();
}
// CanExecute মেথড যা নির্ধারণ করবে কমান্ডটি চালানো যাবে কিনা
public bool CanExecute(object parameter)
{
return _canExecute == null || _canExecute();
}
// CanExecuteChanged ইভেন্ট যা যখন কমান্ডের অ্যাবিলিটি পরিবর্তিত হবে তখন ট্রিগার করবে
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
}
এখন, ViewModel-এ SubmitCommand ব্যবহার করা যাবে। আমরা SubmitCommand কে একটি প্রপার্টি হিসেবে তৈরি করব এবং View-এ Data Binding এর মাধ্যমে এটি ব্যবহার করব।
public class MyViewModel
{
public ICommand SubmitCommand { get; set; }
public MyViewModel()
{
// Command তৈরি করা, যেখানে Execute এবং CanExecute ফাংশন পাস করা হচ্ছে
SubmitCommand = new SubmitCommand(OnSubmit, CanSubmit);
}
// Execute মেথডের জন্য কাজ
private void OnSubmit()
{
// ফর্ম সাবমিট করার জন্য কাজ
Console.WriteLine("Form Submitted");
}
// CanExecute মেথডের জন্য শর্ত
private bool CanSubmit()
{
// সাবমিট শর্ত (যেমন, ফর্ম ফিল্ডগুলো পূর্ণ হলে সাবমিট করা যাবে)
return true; // যেকোনো শর্ত এখানে নির্ধারণ করতে পারেন
}
}
এখন, XAML বা UI-এ SubmitCommand-কে বাইন্ড করা হবে।
<Button Content="Submit" Command="{Binding SubmitCommand}" />
এখানে Button-এর Command প্রপার্টি ViewModel-এর SubmitCommand
-এর সাথে বাইন্ড করা হয়েছে। অর্থাৎ, বাটন ক্লিক করলে OnSubmit() মেথডটি ট্রিগার হবে এবং কাজটি সম্পাদিত হবে।
এভাবে, ICommand ইন্টারফেস এবং Custom Command তৈরি করে, আপনি MVVM প্যাটার্নে কমান্ডের কার্যকারিতা নিশ্চিত করতে পারেন।
common.read_more